import sys
import traceback
from xjlibrary.all_step.BaseAllStep import GlobalControl
from xjlibrary.our_file_dir import BaseDir

curPath = BaseDir.get_file_dir_absolute(__file__)
print(curPath)
sys.path.insert(0, curPath)  # 插入
from Step1_save_url_periodical import main as step1_main
from Step2_save_time_list import main as step2_main
from Step3_parse_timedetails import main as step3_main
from Step4_save_issue_list import main as step4_main
from Step5_parse_issue_fulltext import main as step5_main
from Step6_save_fulltext_list import main as step6_main
from Step7_parse_fulltext_list import main as step7_main
from Step8_Update_cover import main as step8_main
from Step9_down_cover import main as step9_main


class UseGlobalControl(GlobalControl):

    def __init__(self):
        super().__init__(__file__, BaseDir.get_new_path(BaseDir.get_file_dir_absolute(__file__), "logs"))

    def imports(self):
        # import_module("Step1_save_url_periodical.main")
        # import_module("Step2_save_time_list.main")
        # import_module("Step3_parse_timedetails.main")
        # import_module("Step4_save_issue_list.main")
        # import_module("Step5_parse_issue_fulltext.main")
        # import_module("Step6_save_fulltext_list.main")
        # import_module("Step7_parse_fulltext_list.main")
        # import_module("Step8_Update_cover.main")
        # import_module("Step9_down_cover.main")
        pass

    def run(self, strings):
        """
        该步骤运行代码
        :return:
        """
        try:
            if strings == "":
                return True
            result = eval(strings)
        except:
            print(traceback.format_exc())
            return False
        return result

    def set_step1_start(self):
        """
        将第一步的结果归0
        :return:
        """
        sql = "update `journal` set stat=0 WHERE stat=1"
        self.mysqlutils.ExeSqlToDB(sql)

    def start_hook(self, key):
        if key == "9":
            self.key = "9"
            self.nowstep = ""
            return True

    def one_check(self):
        """
        该步骤检查代码是否运行完成
        :return:
        """
        if self.key == "1":
            print("检查第一步")
            self.writetrue()
        elif self.key == "2":
            print("检查第二步")
            sql = "select `name`,stat from journal"
            rows = self.mysqlutils.SelectFromDB(sql)
            for row in rows:
                if row[1] == 0:
                    if row[0] == "STAR Protocols":
                        continue
                    self.writefalse("还有状态为0的数据,请检查")
                    return False
            from Step2_save_time_list import sPath
            for filepath in BaseDir.get_dir_all_files(sPath):
                if BaseDir.get_file_size(filepath) == 0:
                    self.writefalse("有文件大小为0")
                    return False
            self.writetrue()

        elif self.key == "3":
            sql = "select stat from issue where stat=0"
            rows = self.mysqlutils.SelectFromDB(sql)
            if rows:
                self.writetrue()
            else:
                self.writefalse("解析出来没有数据，请检查")
        elif self.key == "4":
            sql = "select stat from issue where stat=0"
            rows = self.mysqlutils.SelectFromDB(sql)
            if not rows:
                self.writetrue()
            else:
                self.writefalse("有issue没有下载 请检查原因")
        elif self.key == "5":
            sql = "select stat from archive where stat=0"
            rows = self.mysqlutils.SelectFromDB(sql)
            if rows:
                from Step5_parse_issue_fulltext import sPath
                if BaseDir.is_null_dir(sPath):
                    self.writetrue("有新增量{},无法判断是否解析完，请自行评估".format(str(len(rows))))
                else:
                    self.writefalse("目录还没有解析完")
            else:
                self.writefalse("有issue没有下载 请检查原因")
        elif self.key == "6":
            sql = "select stat from archive where stat=0 and Failed<3"
            rows = self.mysqlutils.SelectFromDB(sql)
            if not rows:
                self.writetrue()
            else:
                self.writefalse("article表中有状态为0的数据表示没有下载完")
        elif self.key == "7":
            from Step7_parse_fulltext_list import sPath
            if BaseDir.is_null_dir(sPath):
                self.writetrue()
            else:
                self.writefalse("存在没有解析完的情况")
        elif self.key == "8":
            sql = "SELECT `cover_url`,`url` FROM `journal` WHERE `stat` != 2 and cover_url != ''"
            rows = self.mysqlutils.SelectFromDB(sql)
            if len(rows) == 37:
                self.writetrue()
            else:
                self.writefalse("图片数量不是37")
        elif self.key == "9":
            from Step9_down_cover import sPath
            if BaseDir.get_dir_file_num(sPath) == 37:
                self.writetrue()
            else:
                self.writefalse("图片数量不是37")

        if "9" in self.jsondicts.keys() and self.jsondicts["9"]["isFinish"]:
            return True
        return False


if __name__ == "__main__":
    globalcontrol = UseGlobalControl()
    globalcontrol.work()
